package pakete2;

import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Vector;
import java.util.Date;

public class Kudeatzailea extends UnicastRemoteObject implements
		KudeatzaileInterfazea {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	DB_Kudeatzailea dbKud;

	/**
	 * eraikitzailea
	 * 
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public Kudeatzailea() throws RemoteException {
		dbKud = new DB_Kudeatzailea();
		try {
			dbKud.getKonexioa();
		} catch (SQLException e) {
			//e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * irakasle profila duten erabiltzaileen id-ak itzultzen ditu
	 * 
	 * @return irakasleen identifikadoreen bektore bat
	 * @throws IllegalStateException
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public Vector<Integer> getIrakasleak() {
		try {
			return dbKud.getErabiltzaileak("Irakaslea");
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * txartela 2 urte baino zaharragoa eta emandako daten artean sarbide
	 * eskaera ukatuak dituzten erabiltzaileak itzuliko ditu
	 * 
	 * @param erabiltzaile
	 *            baten identifikadorea
	 * @return erabiltzailearen txartelaren identifikadorea
	 * @throws IllegalStateException
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public Integer getTxartela2Urte(int erab_id) throws IllegalStateException,
			SQLException, ClassNotFoundException {
		return dbKud.getTxartela2Urte(erab_id);
	}

	/**
	 * txartel baten id-a eta hilabete kopuru bat emanda, azken hilabete
	 * horietan izan dituen sarbide eskaera ukatuen id-ez osatutako bektore bat
	 * itzultzen du
	 * 
	 * @param txartel
	 *            baten identifikadorea
	 * @param hilabete
	 *            kopuru bat
	 * @return sarbide eskaera id-ez osatutako bektorea
	 * @throws IllegalStateException
	 * @throws SQLException
	 */
	public Vector<Integer> getSarbideEskaeraUkatuak(int txartel_id,
			int hilabeteKop) throws IllegalStateException, SQLException {
		return dbKud.getSarbideEskaeraUkatuak(txartel_id, hilabeteKop);
	}

	// public void getErabDatuak(int erab_id) throws SQLException,
	// ClassNotFoundException{
	// dbKud.getErabDatuak(erab_id);
	// }

	/**
	 * erabiltzaile baten identifikadorea emanda bere izena lortzen du
	 * 
	 * @param erabiltzaile
	 *            baten identifikadorea
	 * @return erabiltzaileren izena
	 * @throws IllegalStateException
	 * @throws SQLException
	 */
	public String getErabiltzailea(int i) throws IllegalStateException,
			SQLException {
		return dbKud.getErabiltzailea(i);

	}

	/**
	 * Erabiltzaile baten identifikadorea emanda bere txartelaren
	 * identifikadorea itzultzen du
	 * 
	 * @param erabiltzaile
	 *            baten identifikadorea
	 * @return txartelaren identifikadorea
	 * @throws IllegalStateException
	 * @throws SQLException
	 */
	public int getTxartela(int erab_id) throws IllegalStateException,
			SQLException {
		return dbKud.getTxartela(erab_id);
	}

	/**
	 * erabiltzailea baten izena bere txartelaren identifikadorea eta
	 * deskribapen bat emanda intzidentzia bat sortzen du eta datu basea
	 * eguneratzen du
	 * 
	 * @param erabiltzaile
	 *            izena
	 * @param txartelaren
	 *            identifikadorea
	 * @param deskribapena
	 * @throws IllegalStateException
	 * @throws SQLException
	 */
	public void sortuIntzidentzia(String izena, int txartelKod,
			String deskribapena) throws IllegalStateException, SQLException {
		dbKud.sortuIntzidentzia(izena, txartelKod, deskribapena);

	}

	/**
	 * parametro bidez pasatako galdera exekutatzen du datu basean eta emaitza
	 * itzultzen du
	 * 
	 * @param exekutatu
	 *            nahi den galdera
	 * @return Resulset
	 * @throws SQLException
	 * @throws IllegalStateException
	 */
	public void exekutatuGaldera(String galdera) throws IllegalStateException,
			SQLException {
		dbKud.exekutatuGaldera(galdera);

	}

	/**
	 * zutabe baten posizioa emanda zutabe horren mota itzultzen du
	 * 
	 * @param zutabearen
	 *            posizioa
	 * @return zutabearen mota
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public Class getColumnClass(int zutabe) throws SQLException,
			ClassNotFoundException {
		return dbKud.getColumnClass(zutabe);
	}

	/**
	 * Zutabe kopurua itzultzen du
	 * 
	 * @return zutabe kopurua
	 * @throws SQLException
	 */
	public int getColumnCount() throws SQLException {
		return dbKud.getColumnCount();

	}

	/**
	 * taulak duen lerro kopurua itzultzen du
	 * 
	 * @return taulak duen lerro kopurua
	 */
	public int getNumberOfRows() {
		return dbKud.getNumberOfRows();
	}

	/**
	 * Parametro bidez pasatako lerrora mugitzen du kurtsorea
	 * 
	 * @param lerro
	 *            kopurua adierazten duen int-a
	 * @throws SQLException
	 */
	public void absolute(int i) throws SQLException {
		dbKud.absolute(i);

	}

	/**
	 * Uneko lerroan eta parametro bezala jasotako zutabean dagoen objetua
	 * itzultzen du
	 * 
	 * @param zutabea
	 *            adierazten duen int-a
	 * @return Object bat, uneko lerroan eta parametro bidez pasatako zutabean
	 *         dagoena
	 * @throws SQLException
	 */
	public String getObject(int i) throws SQLException {
//		EmaitzaObject ema = new EmaitzaObject(dbKud.getObject(i));
//		return ema;
		return dbKud.getObject(i);
	}

	/**
	 * zutabearen posizioa emanda bere izena itzultzen du
	 * 
	 * @param zutabearen
	 *            posizioa
	 * @return zutabearen izena
	 * @throws SQLException
	 */
	public String getColumnName(int i) throws SQLException {
		return dbKud.getColumnName(i);
	}

	/**
	 * parametro bidez pasatako galdera exekutatzen du datu basean eta
	 * numberOfRows aldagaian uzten du emaitzaren lerro kopurua
	 * 
	 * @param query
	 * @throws SQLException
	 */
	public void setQuery(String query) throws SQLException {
		dbKud.setQuery(query);

	}

	/**
	 * sarbide eskaera baten identifikadorea emanda, sarbide eskaera egin duen
	 * erabiltzailearen identifikadorea itzultzen du
	 * 
	 * @param sarbide
	 *            eskaera identifikadorea
	 * @return erabiltzailearen identifikadorea
	 * @throws IllegalStateException
	 * @throws SQLException
	 */
	public int getErabiltzaileId(int i) throws IllegalStateException,
			SQLException {
		return dbKud.getErabiltzaileId(i);
	}

	public Integer getIrakasleId(int i) throws IllegalStateException,
			SQLException, RemoteException {
		return new Integer(dbKud.getIrakasleId(i));

	}

	public static void main(String args[]) {

		System.setProperty("java.security.policy", "segurtasun.politika");
		if (System.getSecurityManager() == null) {
			System.setSecurityManager(new RMISecurityManager());
		}

		try {
			Kudeatzailea kud = new Kudeatzailea();
			Kudeatzailea kud2 = new Kudeatzailea();
			
			try {
				java.rmi.registry.LocateRegistry.createRegistry(1099); // RMIREGISTRY
																		// jaurtitzearen
																		// baliokidea
			} catch (Exception e) {
				System.out
						.println(e.toString()
								+ "\nSuposatzen dugu errorea dela rmiregistry aurretik jaurti delako ");
			}
			// Urruneko zerbitzua erregistratu
			Naming.rebind("kudeatzailea", kud);
			Naming.rebind("kudeatzaile2", kud2);
			// "//IPHelbidea:PortuZenb/zerbitzuIzena"
			// EZ DABIL rmiregistry izen zerbitzaria localhost-en EZ BADAGO

		} catch (Exception e) {
			System.out
					.println("Errorea zerbitzaria jaurtitzean" + e.toString());
		}

		
	}

	public void mugitu(int i) {
		try {
			dbKud.mugitu(i);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

public int desgaituTxartela(String txartelkod) {
		return dbKud.desgaituTxartela(txartelkod);
		
	}
	public Vector<String> getTxartelak() {
		try {
			return dbKud.getTxartelak();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public int GaituTxartela(String txartelkod) throws SQLException, RemoteException {
		return dbKud.GaituTxartela(txartelkod);
	}

	public String erabiltzaileDatuakLortu(String txartelkod) throws SQLException, RemoteException {
		return dbKud.erabiltzaileDatuakLortu(txartelkod);
	}

	public Vector <String> erabiltzaileakLortu()throws RemoteException{
		return dbKud.erabiltzaileakLortu();

	}
	
	public int emanDatuak(String izen, String pasahitz)throws RemoteException{
		int emaitza;
		emaitza = dbKud.sartuErabiltzailea(izen,pasahitz);
		if (emaitza==-1)System.out.println("errorea erabiltzailea sartzerakoan");
		return emaitza;
	
	}
	public void profilaEsleitu(int profilaId, int erabiltzaileaId)throws RemoteException{
		dbKud.setProfila(profilaId,erabiltzaileaId);
	}
	public void txartelaEsleitu(int erabiltzaileId)throws RemoteException{
		int id;
		
		id = dbKud.createTxartela();
		try {
			dbKud.esleituTxartela(id,erabiltzaileId);
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	


}
